package com.desay.pangoo.itmt.config;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;
import org.springframework.util.ObjectUtils;

/**
 * 
 * @Description： 时间转换工具
 * 
 * @author uidq1163 on [2022年4月22日下午3:04:44]
 * @Modified By： [修改人] on [修改日期] for [修改说明]
 *
 */
public class CourseDateConverter implements Converter<String, Date> {
    private static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
    private static final String DATEFORMATA = "yyyy-MM-dd HH:mm:ss";
    private static final String SHORTDATEFORMAT = "yyyy-MM-dd";
    private static final String SHORTDATEFORMATA = "yyyy/MM/dd";
    private static final String TIMESTAMPFORMAT = "^\\d+$";

    @Override
    public Date convert(String value) {
        if (ObjectUtils.isEmpty(value)) {
            return null;
        }
        value = value.trim();
        try {
            if (value.contains("-")) {
                SimpleDateFormat formatter;
                if (value.contains(":")) {
                    // yyyy-MM-dd HH:mm:ss 格式
                    formatter = new SimpleDateFormat(DATEFORMAT);
                } else {
                    // yyyy-MM-dd 格式
                    formatter = new SimpleDateFormat(SHORTDATEFORMAT);
                }
                return formatter.parse(value);
            } else if (value.matches(TIMESTAMPFORMAT)) {
                //时间戳
                Long lDate = Long.valueOf(value);
                return new Date(lDate);
            } else if (value.contains("/")) {
                SimpleDateFormat formatter;
                if (value.contains(":")) {
                    // yyyy/MM/dd HH:mm:ss 格式
                    formatter = new SimpleDateFormat(DATEFORMATA);
                } else {
                    // yyyy/MM/dd 格式
                    formatter = new SimpleDateFormat(SHORTDATEFORMATA);
                }
                return formatter.parse(value);
            }
        } catch (Exception e) {
            throw new RuntimeException(String.format("parser %s to Date fail", value));
        }
        throw new RuntimeException(String.format("parser %s to Date fail", value));
    }
}
